前兩天介紹的 array & slice 都是以數字作為索引
今天要講的 map 可以利用數種資料型別做為鍵(索引),取得相對應的值
package main
func main() {
m := make(map[string]string)
m["thresh"] = "hook"
m["nami"] = "splash"
m["bard"] = "meeps"
m["blitz"] = "grab"
}
前面以 thresh 作為鍵, hook 作為對應的值(映射)
若我們需要檢測某項鍵/值是否存在
可以利用 log.fatal 來執行檢測
if !(m["sona"] == "") {
log.Fatal("no such thing")
}
package main
import "log"
func main() {
m := make(map[string]string)
m["thresh"] = "hook"
m["nami"] = "splash"
m["bard"] = "meeps"
m["blitz"] = "grab"
m["sona"] = "song"
v, ok := m["thresh"]
if !ok {
log.Fatal("it should be true")
}
if !(v == "hook") {
log.Fatal("Wrong value")
}
_, ok = m["sona"]
if !(ok == false){
log.Fatal("it should be false")
}
}
https://play.golang.org/p/j7HNfNQAF_K
如果是不存在的值 , v = 0 , ok = false
因為我的 sona 應為空值 所以系統會發出警告 "it should be false"
如果我們需要刪除某對鍵值
只需要呼叫該 map 並告訴他要刪除的鍵即可
delete(m, "sona")
map是沒有順序的
如果用for迴圈列印
可以發現是隨機排列的
package main
import "log"
func main() {
m := make(map[string]string)
m["thresh"] = "hook"
m["nami"] = "splash"
m["bard"] = "meeps"
m["blitz"] = "grab"
m["sona"] = "song"
for i := 0; i < 10; i++ {
for k, v := range m {
fmt.Println(fmt.Sprintf("%s: %s", k, v))
}
fmt.Println("")
}
}
部份內容參考自:
https://michaelchen.tech/golang-programming/map/#%E7%A7%BB%E9%99%A4%E9%8D%B5%E5%80%BC%E5%B0%8D
https://hsinyu.gitbooks.io/golang_note/content/map_1.html